home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / tabpage.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  5KB  |  132 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''
  5. a couple of classes for implementing partial tabbed-page like behaviour
  6. '''
  7. from Tkinter import *
  8.  
  9. class InvalidTabPage(Exception):
  10.     pass
  11.  
  12.  
  13. class AlreadyExists(Exception):
  14.     pass
  15.  
  16.  
  17. class PageTab(Frame):
  18.     """
  19.     a 'page tab' like framed button
  20.     """
  21.     
  22.     def __init__(self, parent):
  23.         Frame.__init__(self, parent, borderwidth = 2, relief = RIDGE)
  24.         self.button = Radiobutton(self, padx = 5, pady = 5, takefocus = FALSE, indicatoron = FALSE, highlightthickness = 0, borderwidth = 0, selectcolor = self.cget('bg'))
  25.         self.button.pack()
  26.  
  27.  
  28.  
  29. class TabPageSet(Frame):
  30.     """
  31.     a set of 'pages' with TabButtons for controlling their display
  32.     """
  33.     
  34.     def __init__(self, parent, pageNames = [], **kw):
  35.         """
  36.         pageNames - a list of strings, each string will be the dictionary key
  37.         to a page's data, and the name displayed on the page's tab. Should be
  38.         specified in desired page order. The first page will be the default
  39.         and first active page.
  40.         """
  41.         Frame.__init__(self, parent, kw)
  42.         self.grid_location(0, 0)
  43.         self.columnconfigure(0, weight = 1)
  44.         self.rowconfigure(1, weight = 1)
  45.         self.tabBar = Frame(self)
  46.         self.tabBar.grid(row = 0, column = 0, sticky = EW)
  47.         self.activePage = StringVar(self)
  48.         self.defaultPage = ''
  49.         self.pages = { }
  50.         for name in pageNames:
  51.             self.AddPage(name)
  52.         
  53.  
  54.     
  55.     def ChangePage(self, pageName = None):
  56.         if pageName:
  57.             if pageName in self.pages.keys():
  58.                 self.activePage.set(pageName)
  59.             else:
  60.                 raise InvalidTabPage, 'Invalid TabPage Name'
  61.         
  62.         for page in self.pages.keys():
  63.             self.pages[page]['tab'].config(relief = RIDGE)
  64.         
  65.         self.pages[self.GetActivePage()]['tab'].config(relief = RAISED)
  66.         self.pages[self.GetActivePage()]['page'].lift()
  67.  
  68.     
  69.     def GetActivePage(self):
  70.         return self.activePage.get()
  71.  
  72.     
  73.     def AddPage(self, pageName):
  74.         if pageName in self.pages.keys():
  75.             raise AlreadyExists, 'TabPage Name Already Exists'
  76.         
  77.         self.pages[pageName] = {
  78.             'tab': PageTab(self.tabBar),
  79.             'page': Frame(self, borderwidth = 2, relief = RAISED) }
  80.         self.pages[pageName]['tab'].button.config(text = pageName, command = self.ChangePage, variable = self.activePage, value = pageName)
  81.         self.pages[pageName]['tab'].pack(side = LEFT)
  82.         self.pages[pageName]['page'].grid(row = 1, column = 0, sticky = NSEW)
  83.         if len(self.pages) == 1:
  84.             self.defaultPage = pageName
  85.             self.activePage.set(self.defaultPage)
  86.             self.ChangePage()
  87.         
  88.  
  89.     
  90.     def RemovePage(self, pageName):
  91.         if pageName not in self.pages.keys():
  92.             raise InvalidTabPage, 'Invalid TabPage Name'
  93.         
  94.         self.pages[pageName]['tab'].pack_forget()
  95.         self.pages[pageName]['page'].grid_forget()
  96.         self.pages[pageName]['tab'].destroy()
  97.         self.pages[pageName]['page'].destroy()
  98.         del self.pages[pageName]
  99.         if not self.pages:
  100.             self.defaultPage = ''
  101.             return None
  102.         
  103.         if pageName == self.defaultPage:
  104.             self.defaultPage = self.tabBar.winfo_children()[0].button.cget('text')
  105.         
  106.         if pageName == self.GetActivePage():
  107.             self.activePage.set(self.defaultPage)
  108.         
  109.         self.ChangePage()
  110.  
  111.  
  112. if __name__ == '__main__':
  113.     root = Tk()
  114.     tabPage = TabPageSet(root, pageNames = [
  115.         'Foobar',
  116.         'Baz'])
  117.     tabPage.pack(expand = TRUE, fill = BOTH)
  118.     Label(tabPage.pages['Foobar']['page'], text = 'Foo', pady = 20).pack()
  119.     Label(tabPage.pages['Foobar']['page'], text = 'Bar', pady = 20).pack()
  120.     Label(tabPage.pages['Baz']['page'], text = 'Baz').pack()
  121.     entryPgName = Entry(root)
  122.     buttonAdd = Button(root, text = 'Add Page', command = (lambda : tabPage.AddPage(entryPgName.get())))
  123.     buttonRemove = Button(root, text = 'Remove Page', command = (lambda : tabPage.RemovePage(entryPgName.get())))
  124.     labelPgName = Label(root, text = 'name of page to add/remove:')
  125.     buttonAdd.pack(padx = 5, pady = 5)
  126.     buttonRemove.pack(padx = 5, pady = 5)
  127.     labelPgName.pack(padx = 5)
  128.     entryPgName.pack(padx = 5)
  129.     tabPage.ChangePage()
  130.     root.mainloop()
  131.  
  132.